// User32Hook.h

#pragma once

typedef BOOL (WINAPI *PTrackPopupMenu)(HMENU hMenu, UINT uFlags, int x, int y, int nReserved, HWND hWnd, const RECT *prcRect);
typedef LRESULT (WINAPI *PCallWindowProcW)(WNDPROC lpPrevWndFunc, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
typedef HMENU (WINAPI *PLoadMenuW)(HINSTANCE hInstance, LPCWSTR lpMenuName);
typedef INT_PTR (WINAPI *PDialogBoxParamW)(HINSTANCE hInstance, LPCWSTR lpTemplateName, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM dwInitParam);
typedef LRESULT (WINAPI *PDispatchMessageW)(const MSG *lpMsg);
typedef LONG_PTR (WINAPI *PSetWindowLongPtrW)(HWND hWnd, int nIndex, LONG_PTR dwNewLong);

extern BOOL WINAPI TrackPopupMenuHook(HMENU hMenu, UINT uFlags, int x, int y, int nReserved, HWND hWnd, const RECT *prcRect);
extern LRESULT WINAPI CallWindowProcWHook(WNDPROC lpPrevWndFunc, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
extern HMENU WINAPI LoadMenuWHook(HINSTANCE hInstance, LPCWSTR lpMenuName);
extern INT_PTR WINAPI DialogBoxParamWHook(HINSTANCE hInstance, LPCWSTR lpTemplateName, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM dwInitParam);
extern LRESULT WINAPI DispatchMessageWHook(const MSG *lpMsg);
extern LONG_PTR WINAPI SetWindowLongPtrWHook(HWND hWnd, int nIndex, LONG_PTR dwNewLong);

